-
Notifications
You must be signed in to change notification settings - Fork 52
[1팀 안재현] Chapter 1-2. AI와 테스트를 활용한 안정적인 기능 개발 #65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
JaeHyunGround
wants to merge
173
commits into
hanghae-plus:main
Choose a base branch
from
JaeHyunGround:main
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- 테스트 코드를 잘 작성하는 규칙에 대해 md 파일로 정리했습니다.
- TDD Flow에 대한 가이드를 md 문서로 정리했습니다.
- 해당 에이전트는 구현해야 할 기능에 대한 기능 명세서를 prd 문서로 정리합니다. - 정리된 prd 문서를 바탕으로 기능 범위를 epic 단위로 정리하여 문서화합니다.
- analyst 에이전트에게 구현해야 할 기능에 대해 설명하고 이를 prd 문서로 정리시켰습니다.
- Analyst 에이전트에게 작성된 prd 문서를 토대로 Epic 단위의 테스크를 생성하라고 명령했습니다.
- 해당 에이전트는 만들어진 Epic에 대해 여러 개의 story로 분리하는 에이전트입니다. - 각 story는 개발자가 작업해야 할 내용을 나타냅니다. - 각 story는 하나의 역할을 기준으로 작성합니다. - 생성된 story는 .cursor/spec/stories/<epic-slug>/*.md 형태로 저장합니다.
- SM 에이전트에게 반복 유형 선택 epic에 대한 story를 분리하라고 명령하여 나온 결과물입니다.
- 각 에이전트가 해당 문서를 참고하여 작업할 수 있도록 TDD 가이드, RTL 테스트 코드 작성 시 유의사항 에 대해 정리했습니다.
- 해당 에이전트는 각 story에 대한 테스트 코드를 설계하고 작성하는 에이전트입니다. - TDD 사이클의 Red 단계를 담당 합니다. - 프로젝트 내 kent-beck-tdd, rtl-test-rules 문서를 참고하여 테스트 코드 설계 & 작성하도록 설정했습니다.
- architect 에이전트에게 form-state-validation story에 대한 테스트 코드 설계 및 작성을 요구하여 출력된 결과물입니다. - 중간중간 any 타입을 사용하는 경우가 있어, any 타입 사용을 지양하라는 명령을 하여 내용을 보완했습니다.
- 해당 에이전트는 TDD Flow의 Green 단계를 수행하는 에이전트로, architect 에이전트가 각 story에 대한 작성한 테스트 코드를 통과할 수 있도록 기능을 구현하는 에이전트입니다.
- Developer 에이전트가 form-state-validation story의 테스트 코드를 통과하도록 기능을 구현한 내용입니다. - 기능 구현 후 검증 절차를 추가하여 코드의 정확성을 높이고자 했습니다.
- 에이전트 기능 수정 전, 이전에 작업했던 내용물을 기록을 위해 _old 폴더를 추가했습니다.
- 혹시 모를 네이밍 혼동을 방지하기 위해 폴더명을 수정했습니다 ( _old/.cursor -> _old/(.cursor) )
- 해당 에이전트는 TDD Flow의 Refactor 단계를 수행하는 에이전트입니다. - 주어진 story 관련 내용 이외의 것들은 수정하지 않도록 수정했습니다.
- 해당 에이전트가 리팩토링을 수행하고 결과를 문서화해 파일 형태로 저장하도록 역할을 추가했습니다.
- 기존 QA 에이전트로 리팩토링 작업 진행 시 '리팩토링 문서'를 생성해주지 않아, 작업이 끝난 후 "리팩토링 문서도 작성해줘" 라는 프롬포트를 작성해야지 리팩토링 결과 문서를 작성하는 경우가 있었습니다. - 2번 묻는 것을 막기 위해 해당 에이전트에 "어떻게 에이전트 코드를 수정하면 너가 리팩토링과 리팩토링 결과 보고서를 작성할 수 있겠어?" 라는 프롬포트를 전달했고, 이에 따른 결과물을 에이전트 코드에 반영했습니다.
각 에이전트를 활용하여 TDD Flow를 조율하는 에이전트입니다.
- 각 단계 진행 후, 각각의 체크리스트를 만족하는 지 확인하는 플로우 추가 - 커밋 컨벤션 명시
- AI에게 모든 설계를 맡겼던 이전 버전과는 다르게, 제가 원하는대로 에이전트가 동작할 수 있도록 구조를 변경했습니다. - 이전 버전은 PRD + Epic 생성을 담당했다면 현재는 주어진 기능에 대한 명세 구체화를 진행하는 정도로 설정했습니다. - output 구조를 명시하여 매번 동일한 구조의 결과물이 나올 수 있도록 설정했습니다. - TDD 프로세스를 항상 인지하며 작업을 수행하도록 명시했습니다.
- 이전 에이전트는 AI에게 모든 설계를 맡겼기에 에이전트를 재정의했습니다.
- Analyst 에이전트가 정리한 명세 문서를 바탕으로 테스트 가능한 최소 단위의 story를 생성하는 에이전트입니다.
- output인 story 문서를 구조화하여 항상 동일한 구조의 결과물을 낼 수 있도록 명시했습니다.
- story를 너무 세세하게 나누는 상황이 발생해 "Epic의 "예상 동작" 섹션 하나를 `describe('...', () => {})` 블록 하나로 완성할 수 있는 단위로 정의" 라는 문구를 추가하여 너무 세세하게 동일한 섹션은 하나의 story로 분리할 수 있도록 제한했습니다.
- 다른 TDD 단계에 간섭하지 않도록 "Story 분리만 수행" 이라는 문구를 명시했습니다.
- AI에게 모든 설계를 맡겼던 이전 버전의 에이전트를 재정의했습니다. - TDD 프로세스의 Red 단계(테스트 실패 확인)에만 집중하도록 명시했습니다. - output 형태를 구조화하여 항상 동일한 형태의 결과물을 낼 수 있도록 명시했습니다. - 체크리스트를 추가하여 작업 내용을 검증하고자 했습니다.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
과제 체크포인트
필수 스펙
기본 과제
공통 제출
기본 과제(Easy)
기본 과제(Hard)
심화 과제
과제 셀프회고
모든 것을 AI에게 위임하지 말자
과제 초반에는 "나보다 AI가 더 똑똑하니깐 AI한테 알잘딱으로 만들어 달라 해야지 ~" 라는 생각을 가지고 과제를 진행했습니다.
그로 인해 생겼던 문제점은 AI가 결과물은 내주는데, 이 결과물이 올바른 결과물인지 판단하기 어렵다는 것입니다. AI가 내는 결과물을 검토하는 절차가 중요하다는 코치님의 말씀에 어긋나는 행위를 하고있었습니다. 이는 코치님과 페어 프로그래밍 과정에서도 드러난 문제점이었습니다.
저는 문제를 해결하기 위해 작성된 에이전트 코드를 삭제하고 처음부터 에이전트를 다시 구현하는 것을 선택했습니다. 에이전트를 재구현할 때 명심했던 부분은 "내가 해당 에이전트에게 어떤 일을 시킬 것이며, 어떤 결과 값을 받아내고 싶은지" 입니다. 이를 명확하게 설정하고 에이전트를 구현하니 에이전트가 내는 결과물에 대해 올바른 결과물인지 판단하기 수월해졌습니다.
하지만, 오케스트레이션 에이전트를 구현할 때는 어려운 부분이 많았습니다. 지금도 제 오케스트레이션 에이전트는 제가 의도한대로 동작하지 않아 고민이 많이 됩니다. 분명히 작업 플로우와 각 단계에서 사용해야 할 에이전트를 명시 했음에도 불구하고 제가 의도한대로 동작을 하지 않으니 참으로 답답합니다.
결국 과제는 각 에이전트에게 제가 직접 업무를 부여하는 식으로 진행했습니다. 과제 피드백을 통해 코치님들의 오케스트레이션 에이전트 구현 노하우를 여쭙고 제 에이전트에도 반영하여 잘 동작하는 오케스트레이션 에이전트를 만들고 싶습니다.
AI라곤 GPT에게 "이거 어떻게 해결해?" 와 같은 질문을 던지는 방식으로만 사용했던 저에게 해당 과제는 AI 활용의 폭을 넓혀주었고 AI 진입 장벽을 낮춰준 과제였습니다. 상당히 의미 있었고 꼭 과제를 완수하고 싶었지만,
PR을 작성하는 현재 시점에서 테스트 코드 자체가 실행이 되지 않는 문제를 마주쳐 이를 해결하는 데 시간을 많이 사용하고 있습니다...해결 !!!!!!!!!!!ps. 명시한 동작대로 행동하지 않은 에이전트에게 정말 화가 많이 나더라구요... 테스트 코드 작성 에이전트에게 체크 리스트를 주고 판단하도록 했는데 테스트 코드 실행 자체가 안되고 있는 것을 왜 그냥 넘겼을까요....
기술적 성장
프롬포트 작성법
이전 : 에러 코드 던진 뒤 "이거 어떻게 해결해?"
현재 : ~~한 코드를 작성했더니 ~~한 결과물이 나왔어. 내가 원하는 방향은 ~~인데, 현재 코드의 문제점이 무엇이며 어떻게 수정해나갈 수 있을까? (any 타입은 절대 사용하면 안되고, 등등의 제약조건 혹은 필수로 했으면 좋겠는 부분 명시)
AI에게 원하는 답변을 얻기위한 프롬포트 작성법에 대해 익힐 수 있었습니다.
AI에게 모든 것을 위임하지 않기
AI에게 모든 것을 위임하는 것은 바람직하지 않다는 생각을 가질 수 있게 됐습니다. 또한 AI가 낸 결과물이 올바른지 판단할 수 있는 지식을 쌓는 것 또한 중요하다는 것을 알 수 있었습니다.
코드 품질
기능에 대한 스펙 문서 구조화 및 저장
범용적인 에이전트가 아닌 TDD 프로세스에 특화된 에이전트 구현 목표
과제 초반에는 만능 에이전트를 만들고 있는 느낌이 강했는데, 프로젝트 특성에 맞게 TDD Flow에 특화된 에이전트를 구현하고자 했습니다.
따라서 제 에이전트는
필요한 기능에 대한 기능 상세 문서 작성 에이전트기능 상세 문서를 토대로 세세한 story로 작업 단위를 나누는 에이전트테스트 코드 설계 및 작성 에이전트 (TDD Red)테스트 코드를 통과하는 기능 코드 작성 에이전트(TDD Green)작성된 기능 코드 리팩토링 에이전트(TDD Refactor)로 이루어져 있습니다.
학습 효과 분석
잘 사용할 수 있는 방법에 대해서 배울 수 있었습니다.AI 에이전트에 대한 진입 장벽을 부수는 계기가 되었습니다.과제 피드백
최근 가장 핫한 주제인 AI에 대해 진입 장벽을 낮추고 미래에도 유용하게 써먹을 수 있는 기술에 대해 학습할 수 있었습니다. 너무 유익했어요 !
리뷰 받고 싶은 내용
1. 오케스트레이션 에이전트의 이상적인 구조
위와 같이 오케스트레이션 에이전트(Jaehyun) 에게 명확한 워크플로우 구조를 제공했음에도 불구하고
각 에이전트의 문서를 확인 후 자기가 작업을 진행하는 것같았습니다. 에이전트 정의를 md 파일로 해서 에이전트의 존재 유무를 파악하지 못하는 걸까요 ?에이전트 정의 문서에 명확한 워크플로우 구조를 제공했음에도 의도한대로 동작하지 않는 경우가 많았는데, 코치님이라면 각 에이전트가 md 파일로 작성되어 있을 때 오케스트레이션 에이전트를 어떻게 구성하실 것 같나요 ?? 코치님의 노하우를 얻어가고 싶습니다 :)
2. 항상 동일한 구조의 결과물을 내기 위해선 ?
현재는 각 에이전트가 항상 동일한 결과물을 제공했으면 해서 각 에이전트마다 출력 구조를 명세하고 있습니다. 그럼에도 불구하고 가끔씩 자기 멋대로 결과물을 도출하는 경우가 있는데, 항상 동일한 구조의 결과물을 만들어 내는 것은 한계가 있는 부분일까요?
필요한 기능에 대한 기능 상세 문서 작성 에이전트,기능 상세 문서를 토대로 세세한 story로 작업 단위를 나누는 에이전트와 같이 md 문서를 작성하는 에이전트의 경우 대부분 동일한 구조의 결과물을 잘 뽑아내주고 있습니다.별도의 출력 구조 정리 파일을 생성하여 관리하는 것이 좋은 방법일까요?